package com.itheima.demo02;

/**
 * @author Zhang_Han
 * @version 1.0
 * @date 2020/7/13 15:04
 */
/* 消费者类(Foodie)：实现Runnable接口，重写run()方法，设置线程任务
         1.判断是否有包子,决定当前线程是否执行
         2.如果没有包子,就进入等待状态,如果有包子,就消费包子
        3.消费包子后,更新桌子上包子状态,唤醒生产者生产包子*/
public class Fooder extends Thread {
    private Desk desk = new Desk();

    public Fooder(Desk desk) {
        this.desk = desk;
    }

    @Override
    public void run() {
        while (true) {
            synchronized (desk.getLock()) {
                //先判断还有没有包子了 ;
                if (desk.getCount() == 0) {
                    break;
                } else {
                    //判断桌子上有没有包子;如果状态是true,说明有包子,吃货就不需要等待;
                    if (desk.isFlag()) {
                        System.out.println("吃货吃了一个包子!");
                        //将flag的状态设置成false;
                        desk.setFlag(false);
                        //唤醒厨师的等待方法;
                        desk.getLock().notifyAll();
                        //这不很重要,不然会无限循环,美吃掉一个包子就减去一个包子;
                        desk.setCount(desk.getCount() - 1);
                    } else {
                        //代码走到这里说明没有包子,吃货就需要等;
                        try {
                            desk.getLock().wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
}

